﻿// 407 中序后序转先序.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

using namespace std;
/*
http://oj.daimayuan.top/course/7/problem/822

给你一棵二叉树的中序遍历和后序遍历，请你求出先序遍历。

输入格式第一行一个整数 n表示二叉树中点的个数，二叉树中点的编号为 1...n。

第二行一个 1...n的排列，表示二叉树的中序遍历。

第三行一个 1...n的排列，表示二叉树的后序遍历。

数据保证给定的中序遍历和后序遍历对应的二叉树存在。

输出格式
输出一行一个 1...n的排列，表示二叉树的先序遍历。

样例输入
4
2 1 4 3
2 4 3 1
样例输出
1 2 3 4
数据规模
对于所有数据，保证 1≤n≤1024
*/

const int N = 1050;
int pre[N]; int preidx = 0;
int in[N];
int post[N];
int n;


void getPre(int inl, int inr, int postl, int postr) {
	if (inl > inr) return;
	int midx = -1;
	for (int i = inl; i <= inr; i++) {
		if (in[i] == post[postr]) {
			midx = i; break;
		}
	}

	pre[preidx++] = in[midx];

	int leftlen = midx - inl-1;
	

	getPre(inl, midx-1, postl, postl + leftlen);
	getPre(midx + 1, inr, postl + leftlen + 1, postr - 1);

	return;
}


int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) { cin >> in[i]; }
	for (int i = 0; i < n; i++) { cin >> post[i]; }

	getPre(0,n-1,0,n-1);

	for (int i = 0; i < n; i++) {
		cout << pre[i] << " ";
	}

	return 0;
}
 